package com.woniu.task;

import com.woniu.constant.Constant;
import com.woniu.utils.QiNiuUploadUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.core.StringRedisTemplate;

import java.util.Set;

@Configuration
@Slf4j
public class DeleteRedisImageTask {
    @Autowired
    private StringRedisTemplate stringRedisTemplate;
//    @Scheduled(cron = "0/30 * * * * ?")
    public void clearImage(){
        log.debug("===清除无效图片任务开始====");
        // 1. 获取Redis中两个集合的差值 diff
        Set<String> difference = stringRedisTemplate.opsForSet().difference(Constant.REDIS_ALL_UPLOAD_IMAGE,
                Constant.REDIS_DB_UPLOAD_IMAGE);
        // 2. 遍历差值集合
        if (difference != null && difference.size()>0){
            for (String fileName : difference) {
                // 3. 调用阿里云的删除图片的方法
                QiNiuUploadUtils.deleteFile(fileName);
                log.debug("===清除无效图片"+fileName+"====");
                // 4. 将删除的图片名称从all这集合中删除
                stringRedisTemplate.opsForSet().remove(Constant.REDIS_ALL_UPLOAD_IMAGE,fileName);
            }
        }
        log.debug("======清除无效图片定时任务结束=====");
    }
    /**
     * 当两个redis集合 存储成功越来越多 需要清空两个集合
     */
//    @Scheduled(cron = "0 0/2 * * * ?")
    public void clearImageSet(){
        log.debug("=====清除redis图片集合定时任务开始=====");
        //清空之前先执行一次清除无效图片的方法
        clearImage();
        //清空两个集合
        stringRedisTemplate.delete(Constant.REDIS_ALL_UPLOAD_IMAGE);
        stringRedisTemplate.delete(Constant.REDIS_DB_UPLOAD_IMAGE);
        log.debug("=======清除redis图片集合定时任务结束=====");
    }
}
